package com.leetcode.demo;

/**
 * @author 王溪源
 * @ClassName: Question2
 * @Description: 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围[−2^31, 2^32− 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 * @Date 2021/8/21 13:52
 **/
public class Question7 {

    public int reverse(int x) {
        if (x == 0) {
            return 0;
        }
        StringBuilder sb = new StringBuilder ();
        boolean flag = false;
        for (int a = 0; x != 0; x = x / 10) {
            a = x % 10;
            if (a < 0) {
                flag = true;
                sb.append (-a);
            } else {
                sb.append (a);
            }
        }
        String result = sb.toString ();
        if (result.charAt (0) == 0) {
            result = result.substring (1);
        }
        int sum = 0;
        try {
            sum = Integer.parseInt (result);
        } catch (NumberFormatException e) {
            return 0;
        }
        return flag ? -sum : sum;
    }

    public int reverse2(int x) {
        long n = 0;
        while (x != 0) {
            n = n * 10 + x % 10;
            x = x / 10;
        }
        return (int) n == n ? (int) n : 0;
    }

    public int reverse3(int x) {
        int res = 0;
        int last = 0;
        while (x != 0) {
            //每次取末尾数字
            int tmp = x % 10;
            last = res;
            res = res * 10 + tmp;
            System.out.println (res);
            //判断整数溢出
            if (last != res / 10) {
                return 0;
            }
            x /= 10;
        }
        return res;
    }

    public static void main(String[] args) {
        Question7 question7 = new Question7 ();
        question7.reverse (1534236469);
        question7.reverse3 (1534236469);
    }
}
